[WIP] Input validation refactoring

Refactor input validation to make it more consistent.

Todo
* [ ] Tests
* [x] docstrings
`len(set(_num_samples(X) for X in arrays if X is not None)) > 1`?