[MRG] Avoid duplicated methods whenever possible + more robust parameter passing

The main goal of this pr is to ease maintenance.
Do you want a private helper _validate_y instead of the `if ... else ...`?