Is there a reason why don't you drop the metaclass and perform the
validation step after the class has been created using a generic
function?
class Tour(MotourController):
pass
Tour.sqlobjectclass = model.Tour
Tour.widget_edit = TourEdit(controller=Tour, name = "tourheader", ...)
Tour = validate(Tour)