FWIW, where I work...
We always use static js/css files, with ,$version appended. We set Expires. The files, once cached, simply aren't asked for again until the user clears their cache.
You might review http://developer.yahoo.com/performance/rules.html for other ideas; you might also appreciate http://developer.yahoo.com/yslow/ . yslow usually spits out a few good ideas; and a few I ignore because (for what I do) are inapplicable.
Disclaimer: Yes, I work for Yahoo. I'm not intentionally trying to schill my company; I think the information is actually useful, and also came up high on a search for "best practice javascript css cache" using a competitor's search engine. I think I'm inbiased on this post. :-)
List info: http://lists.roundcube.net/dev/