Actually, if your Document Type classes inherit from TreeNode, you can use CMSModuleLoader attributes to make the document factory load instances of your class when it loads treenodes with the specified class name. You can then cast the treenode as your custom type.Just stick this partial class code somewhere. I usually just put it right before my class definiton. Also, Kentico has a built in class generator that you can see under the Fields list in the Document Type editor if you have Development mode turned on. You can do this for CustomTables too.
[DocumentType("TheKenticoDocumentTypeClassName", typeof(YourClassType))]
public partial class CMSModuleLoader
{
}