calling getaccount rpc method on foreign address calling getaccountaddress method on an address associated with the default account return "" the name of the default account. The problem is calling getaccountaddress on foreign address that doesn't exist in the local wallet will return "" !

Shouldn't this method in the last case return an error or something ? 

i think the solution here is to call validateaddress method to check this address ismine or not.
You can't do that. The client only keeps indexes of the balances of addresses you own. There is no ability to query the balance of arbitrary addresses.