Shouldn't 'external' declaration with wrong number of function names be rejected?

I think there are other cases where the two-name form of the external declaration is valid. For example, unboxed float primitives:

external foo : float -> float -> float = "foo_byte" "foo" [@@unboxed]

See section 19.11 of the manual.