Unfourtuantly, there is theoretically no way to prevent people from coding arbitrary data into a transaction. Assume you do have a filtering mechanism. It seems obvious that at any point in the block chain, there is at least 2 legal, non-suspisious, transactions. Using just this, Alice can encode 1 bit of information by saying that the first legal transaction is a '0', and the second legal transaction is a '1'. Transactions can be ordered in a deterministic way (for example, look at them as a giant binary number and sort numerically). The psuedo-anonomous nature of bitcoin means that attempting to filter spamming by the source would not work, as you cannot differentiate a new account that is part of a spam attack from a new account that spent at a bad time.
Obviously it wouldn't be readable to anyone who didn't know what to look for so it couldn't be used for spam/memorials/etc but it could store information.
Also, even when posted in plaintext, I wouldn't say that the messages are readable by people who are not looking for them. (How often do you look at the block chain?)
I would assume so.
Perhaps adding a word-checker to bitcoin clients that looks for recognizable words (or attempts to validate a URL found inside the most recent block).
If block contains words or URLs, disregard it. If not, accept it.
Now Namecoin on the other hand...
You could create a link to child-porn from this very comment I just posted using the right cipher. I am sure of it.
I'm curious what the implications of making some of these removable from the block chain though. Would it just end up being some central authority deciding which transactions are 'appropriate?' Is there a deterministic way of filtering out these 'data spam' transactions (without side-effects)?