If module is not provided we try to load from the subsystem/idm static modules. Otherwise users can specify another module from which a type should be loaded from.

Regarding the 'code', 'class-name' and 'module' behavior, I agree. If users want a built-in/internal type they can use 'code' whose value maps to a enum. If not, they can provide a FQN with the 'class-name' attribute and use the 'module' attribute if desired.