Шумность коландера можно уменьшить, если сделать готовые "ноды" под нужные типы данных. Из коробки у них ноды и типы - это отдельные сущности, которые надо комбинировать. Но ничто не мешает у себя определить классы нод с уже указанными типами. Тогда вместо
count = colander.SchemaNode(colander.Integer())
можно будет писать
count = schemas.IntegerNode()
И да, он более гибкий.
Кастомные валидаторы можно переиспользовать, т.к. это просто внешние функции, а не класс-методы для схемы.
Так же в коландере можно указать "контекст" в котором происходит десериализация или сериализация данных, и этот контекст можно использовать в валидаторах (например достать из request-а конект к базе). Или что-то поменять в самой схеме на основе контекста (например добавить новые поля - полезно когда используются всякие IoC штуки в проекте).
Для меня в нём только один минус - не поддерживается IDE-шками, выдаёт на выходе словарик и надо самому сверяться со схемой, какие поля должны быть в словарике. Не получится использовать схему в аннотациях типа.