[MRG] Input validation refactoring

Refactor input validation to make it more consistent.

Todo
* [ ] Tests
* [x] docstrings
Should we keep *arrays or put a list of array / iterable of array instead?