Well the way it is expressed in the standard:
Does leave open for the possibility of other integer constant expressions (any integer constant expression in fact) to also be called a null pointer constant. But do you really think that is the intended meaning? The consequence being that any integer constant expression is called the null pointer constant.An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
Yes, having worked with an embedded system, and development environment for that embedded system, where that meaning was exactly the case.
The standard specifically allows freedoms for implementations (i.e. compilers and host environments). In fact, the standard goes so far as to say that anything it does not specifically define is undefined (or words to that effect). If something is undefined, any interpretation that may occur in an implementation is correct.
The fact it is possible to detect - as you pointed out - that the wording does leave open the possibility, means it is permitted.