My problem is I kind of have no idea what "good service" is, and I'm not sure I'd want it anyway.
There is a very simple solution to this.
1) First we determine a list of potentially positive or negative actions a server might do, such as smiling or being too assertive about water refills, lets say we determine a list of 50 such actions. For simplification these will be boolean variables, making up our feature vector.
2) Go to five thousand or so restaurants and observe the service for these actions
3) Crowdsource the data so that we show someone a feature vector and ask how much of a tip someone ought to get based on the given actions
4) Build a regression model, maybe use a deep belief net because those are the shit
Then all you need to do is observe the given actions of a server at a new restaurants and ask the regression model how much you should tip.