Primary key

Allows specifying a primary key. Please review and comment.
As every SObject subclass gets the field :id for free, when you specify a primary key that field :id has to be deleted and I couldn't find a better way to do that than doing it on the primary key method (acts as setter and getter). any better solution for that issue ?