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); //... }