But actually, being at costant state of war about a city state is something that has happened IRL and makes city state positioning a great factor. Say 20th century europe, you're playing England and look on Armagh and Brussels as city states you want to care for (maybe Vilnus and Stockolm also). Well, Armagh won't present a problem, as you are "protecting" it, but you (well, your ally Teddy), will need to liberate Brussels twice, due to it being a sweet spot for first step of Barbarossa attacking CdM. -- Until Brussels gets fed-up and invents something called EU to get Germans and French make peace (and they will still fight over over Brussels loyalty).
Main point: liberate and Protect. keep them away from enemies that try to conquer them. a buferr area concering some of your enemy's cities if you need it. Otherwise, you are exposing your ally to someone you know will prey on him.
Only thing I think the game fails to do is not considering an Alliance is broken if your Ally attacks a city state you're suzerain of.
Definitely agree on the last paragraph. Perhaps a pledge or protection or a guarantee needs to be implemented to let hostile AIs know that you mean business and friendly ones know not to attack your interests.