It's a fall trough but it is not the reason why it does works.
It does because (as Daniel already mentioned) a case is a valid
statement, therefore a case following other case is a totally
valid statement.
for example:
case 1:
case 2:
return true;
There are three statements. One which must be followed by
another (case keyword) and another by an expression (return
keyword).
I agree that this is a valid D language construction. But
documentation says that statement "case 1:" must be followed by
any statement except other "case" or "default".
Let's open doc http://dlang.org/statement#CaseStatement
You see that "case ArgumentList :" is followed by
"ScopeStatementList"
(http://dlang.org/statement#ScopeStatementList) which is a list
of any statements except CaseStatement or CaseRangeStatement or
DefaultStatement. This rule conflicts with actual D language
compiler.