Ah!
Sorry for my misinterpretation of the subject!
So your FK field is of type T, and NullCustomer is a derived type of T? Otherwise you won't be able to return a NullCustomer object from the CustomerId field in say Order. In this case, you could use a typeconverter.
LLBLGen Pro explicitly uses FK fields in entities. If an O/R mapper doesn't do that, it needs a container for the FK field, e.g. : myOrder.Customer.CustomerId, where the instance of 'Customer' here can be a nullcustomer because the CustomerId isn't set.
Is this what you're after?
I still don't fully grasp what your end goal is with all this, as it looks to me that this code isn't really helping making things less complex.
It looks like you're trying to achieve that you don't have to deal with a null valued int typed field, which is what's done with nullable fields which aren't supposed to be generated as a nullable field: if you read such a field, e.g. an int field, the entity will return 0 or the default value for the field.
You can also do a check in for example DataAccessAdapter.OnBeforeEntitySave, where you check whether an entity has nulled FK fields (by traversing its Fields collection) and if so, set the field to a default value. The field is then saved.