Only weave message into a timeline when all of its attachments have also completed loading.
This is going to take quite a bit of work at the moment.
Alternative approach:
Have the server keep a model of all loading assets (via Pulse events) and then return a status image when queried. This will be (a) more responsive (as a message can load as soon as it is received, vs. loading when all the assets arrive) and (b) easier to implement in the consumer.