Странное поведение встроенной функции. Не правда ли?
С первого взгяда может показаться нелогичным, но логика здесь есть.
Когда используется all? Когда мы проверяем, что все переменные в iterable-объекте - True (неважно, какого вида). Сформулировав по-другому, можно сказать: "all сообщает о том, что в списке все объекты не False". Т.к. Список пуст - значит в нём нет объектов, которые есть False.
С any похожая логика. "any сообщает о том, что в списке есть хотя бы один элемент True". Т.к. список пуст - значит в нём нет хотя бы одного объекта, который True.
Функция all() использует оператор and, что, в свою очередь, соответствует математическому символу умножения ' * '. Функция any() - оператор or (математический символ сложения ' + ')
Любое что-то можно разбить на составляющие: Что-то и Ничто. Например, 5 = 5 + 0
Так вот, допустим, функция all() принимает аргументом Что-то (какое-либо True). Помня о том, что all() работает 
с ' * ', мы можем разбить это True на True * 1. Т.е. в случае c функцией all() Ничто, получается, принимает значение 1/True.
Сооответственно, помня о том, что any() работает с ' + ', мы можем разбить это True на True + 0. Т.е. в случае c функцией any()  Ничто, получается,  принимает значение 0/False.