I generally don't use nullable foriegn keys. If its a guid column I use empty guid 00000000-0000-0000-0000-000000000000, and if its int I use -1. In both cases if its possible that I will have empty guid or -1 as the value in the column, I don't make the cloumn a foriegn key I just index it. If a row can live without an actual foriegn key value I don't think of it as a foriegn key, to me a true foriegn key must have a value from the corresponding table otherwise I question why to make it a foriegn key. Of course reasonable people may disagree and I won't say you are wrong to disagree, thats just how I look at it.
One of the tricky things for me since mojoportal supports a lot of databases is not all of them natively support guid columns. So even though MS SQL has a newid() function you can use as a default value generator for guid primary keys, I always pass in guids from .NET code instead. For MS SQL tables I often still add the newid as default value on the primary key column, but it doesn't really use it since I pass in the guid in all cases.
So in some dbs I'm using char(36) for guid columns and I must parse it correctly as a guid no matter which db platform is invloved so I don't like any null values, I need empty guid there to make my life easier supporting other db platforms.
If you are building only for MS SQL you can do as you wish, nothing compels you to follow my examples or approaches. The Codesmith templates are only to make a beginning, they don't do everything, they just give a jump start. Feel free to rename and modify any of my Codesmith templates to better suit your preferences. If you add any useful stuff you could also contribute new templates or improvements back to the project.
Best,
Joe