Я бы делал так:
список классов-сообщений: MessageA, MessageB... MessageZ, все наследуются от Message
у каждого есть метод clone(from:XML):Message который читает содержание из потока и создают свою копию исходя из полученных данных. Прийдется создать по экземпляру (лишнему) каждого сообщения, но, я не думаю, что это прям такая нагрузка, зато удобно.
T.е. у вас будет таблица, например:

Код AS3:
private static const MESSAGES:Object = { messageA: new MessageA(), messageB: new MessageB() . . . };
private function parse(event:ProgressEvent):void
{
var messageXML:XML = XML(this._socket.readUTFBytes(this._socket.bytesAvailable));
var message:Message = (MESSAGES[messageXML.localName()] as Message).clone(messageXML);
. . .
}