is there any way for an service provider to detect if the btc came from a wallet like mtgox where you can't send it back?
There is no directory of addresses or anything like that.
Some services might let you query to determine if they are with that service.
For instance,
SMKAKE SMPAKE knows if an address is one for a wallet at Mt.Gox (it even knows if the account it belongs to is verified or not). I don't know the API call for that, it was just added so it may not be documented yet.
That's the only hosted (shared0 EWallet I know that does such a thing.