You can post, say 2006, but the validated year will output one year less, 2005.
Internally, _validate_valid_date is using the built in function date_parse_from_format. When passed just a year (Y) the returned array ($parsed) only contains the year - no month or day, meaning that the call to date($format, mktime($parsed array elements)) returns one year less.
I hope that makes sense..?
To "fix" this, i amended the function to make sure that $parsed[month] and $parsed[day] were set: