We don't seem to have a solid explanation, so I guess it's time to put this in front of Tech Support.
The point is that _CHARACTER_ is *not* reserved, at least not in the way _ALL_ is.
Also notice that enforcement is more or less limited to the DATA step. Here is a PROC step which is happy to permit use of variable names which are not allowed (or at least discouraged) in the DATA step.
[pre]
proc summary data=sashelp.class(obs=3) nway ;
class sex ;
output out=badnames(rename = (_freq_ = _n_ _type_=_error_) )
min(age) = _numeric_
max(age) = _character_
mode(age)= _all_
;
run ;
[/pre]
Of course referencing these names will be a problem.
Another slightly interesting bit of evidence. When this code
[pre]
proc print ;
var _numeric_ _character_ _char_ _all_ _notmetoo_ ;
run ;
[/pre]
is placed in the enhanced editor, the first four specs in the VAR statement are recognized and thus colored blue rather than black.