You're definitely right that tainted coins would be bad for Bitcoin. For something to be useful as a medium of exchange, you really want it to be fungible. If something costs $35, that price is useful because there's nothing special about any particular bill or coin and you can form that $35 however you want.
Since not all IOUs in the same currency are fungible in Ripple, Ripple needs a mechanism to keep the IOUs useful for payment. It does this by allowing each user to specify what issuers they trust and using robust pathfinding to make payments possible.
This mechanism would be needed in Ripple even if all IOUs in the same currency were fungible. Ripple supports cross-currency payments, so it has to find payment paths in case someone who holds only dollars wants to pay someone 50 Euros.
So IOUs not being fungible across issuers is no more a problem for Ripple than IOUs not being fungible across currencies. So long as everyone trusts at least one major gateway and there are paths between all combinations of major gateways, payments will be possible. And Ripple has a few features to try to encourage this end result. So this problem doesn't really affect Ripple's utility as a payment system, and that's how Ripple is being promoted.
However, this still leaves two areas of potential problems. One is using Ripple as a store of value when issuers may change in reliability. The other is reporting a useful balance when your asset portfolio may include IOUs of different value even if denominated in the same currency.
The first problem is just the nature of the system. If you choose to trust an unreliable issuer, you may wind up with worthless IOUs. The very risk averse could respond by not using Ripple as a store of value.
We hope to get at least one regulated financial institution, preferably insured by a major government, to be a Ripple gateway. Ripple gateways hold funds denominated in ordinary fiat currencies, all of which they owe to others. This is analogous enough to what banks do that there's a good chance this can be accomplished.
The second problem is mostly a user-interface issue. Since Ripple is open source -- the client code is already available -- people are free to try different ways of resolving this. One method that has been discussed is listing assets separately (and not in the raw total) if you dropped the credit limit to zero.
So if you don't trust an issuer, you drop their credit limit to zero. This will cause you to start shedding their IOUs automatically as people use you as a payment path and you can't acquire any new IOUs from them. The client could show IOUs from issuers with zero credit limits separately and not include them in the total.