Having worked in a locally owned, independent restaurant for more than four years, and being an assistant manager of said restaurant:
Tipping should not be required, it should be done when the service given warrants it.
If the person serving you is an asshole, feel free to leave NOTHING. I have no sympathy for the people who ignore their customers and then still expect to be tipped.
If you are waited on properly, given the attention you should be given, and enjoyed your dining experience, leave an appropriate tip.
That being said, if you regularly go someplace and regularly get quality food at a reasonable speed, for the love of God, LEAVE A DECENT TIP. It amazes me that so many people would see me five days a week for lunch, get the best food they could possibly be given from a restaurant in its class, pay almost nothing for their meal, and still never even consider tipping.
There is a small handful of customers that I see regularly who tip generously, and they get *perfect* food and service every time because of it. You get what you pay for...
Although, to clarify, I do not expect a tip just for doing my job. If a customer doesn't have a lot of money and can't afford a tip, that's no problem with me. If they genuinely don't realize that tipping is appreciated, I can live with that. But when some asshole comes and buys his $4 meal with a $100 bill, gets ridiculously good service and food, and doesn't tip because he's just a cheap dickhead, that's just downright sad.
My wages are adequate, and I'll only be there for another year or so to finish college, so I'm not getting too worked up about it. But the attention and care that some foodservice workers put into their jobs are wholly unappreciated.
My personal guidelines for tipping: When someone sucks ass at waiting on you, leave them NOTHING. This will accomplish two things: 1) They'll hopefully get the point that they suck, and either improve or find another profession. 2) You'll have extra money to give to the next person who actually does their job properly.
I used to tip a standard 10-15%, but now it's more like 0% - 50% because of my newly adopted guidelines. The guy who works his ass off and gets a $20 tip on a $40 meal really appreciates it, and the guys who don't care about doing a good job get nothing. All is well in the world!