I dislike having codes that correspond to implementation-specific details (nonstandard, dust, insufficient fee, and checkpoint). I'd prefer just encoding the class of problem (p2p protocol violatiom, network rule violation, local client policy) in the code, and use the message to further describe as necessary. Otherwise we'll end up with many extensions over time, and obsolete codes.