Section 2.1.1 defines message types, and includes the important phrase, seemingly ignored by libPurple:
An IM application SHOULD support all of the foregoing message types; if an application receives a message with no 'type' attribute or the application does not understand the value of the 'type' attribute provided, it MUST consider the message to be of type "normal" (i.e.,"normal" is the default).