If the attribute value is an array, like:
myatt: [1,2,3]

...it will be flattened in isValid() and turned into:
myatt.0: 1
myatt.1: 2
myatt.2: 3

When checking the validity of specific attributes with model.isValid([myatt]), the test will never pass, as the attribute name has been changed by 'flatten'.
You can see this if you specify a custom validation function for your array attribute:

validation: {
	myatt: {
		required: true,
		fn: function(value, attribute, compValue) {
			// value will always be undefined here,
			// if the value set in 'myatt' is an array.
		}
	}
}

This change looks for this condition and tries to match the original attribute name with the new flattened name(s) with regular expressions, and changing the key
used to get the value from the 'flattened' object. It only returns the first one it finds, which is good enough for a required test to pass.