By introducing a common entity form controller based on the Entity Property API we will able to generate a basic entity form without needing any additional code from the modules defining the entities. However those will be able to subclass the entity form controller and perform any needed alteration to its behavior.
field_attach_form() currenlty does for Fields only. We can exploit this capability to make
EntityFormController::form() hold most of the code needed to generate an entity form. This way only small tweaks (e.g vertical tabs grouping) will be left to entity-specific implementations.