It sounds like pieces of good advice mixed up and misapplied.
Good advice is passing enums instead of booleans.
SomeFunc (someObject, true, true, true, false);
vs
SomeFunc (someObject, IS_ROUND, IS_BLACK, IS_SHINY, IS_NOT_ALIVE);
It's much more clear what the second function does. However there's a good argument to be made that good documentation combined with Intellisense can alleviate this concern, and perhaps it could be argued that adding all these specific enums could cause clutter. I think of it as a good general practice to name your parameters in this way, but perhaps if you have a series of bools like that it indicates another problem in the function design.
I think the grad student in question may have misapplied this advice to return values. In the case of a return value there is only one and it tends to have an unambiguous meaning if it's bool (success or failure). For return values I wouldn't find as much value in the practice of using named parameters rather than the (often) built-in boolean type.
Regarding returning arrays, I +1'd Sébastien Rocca-Serra's answer because it's a great point for Java specifically. In C++ a much better "best practice" would be to never return an array ever. The point Sebastien raised is taken, though... returning a valid value in every case (even if that value is a stub or sentinel) can lead to easier error handling in the calling code. In this case I think the spirit of the rule is much better than the letter of the rule as relayed to us.
As for returning an iterator, I don't have much comment. Given the trends so far I assume it's a skewed version of some practical advice, so if others can enlighten me on the pearl of wisdom in it I'd be appreciative.