RadDataForm does not validates correctly objects inherited from ICustomTypeDescriptor because it uses standard Validator.TryValidateObject method which works with standard reflection. Insteed it must use internal dynamic PropertyDescriptors and validate object by them.
RadDataForm.cs:
RadDataForm.cs:
public
bool
ValidateItem()
{
//...
Validator.TryValidateObject(CurrentItem,
new
ValidationContext(CurrentItem,
null
,
null
), validationResults,
true
);
//...
}