I actually implemented an interesting solution for this. I was building a site which had lots of gradients of various colors. All together if I did it with images it would have added probably 50KB+ to the overall load (in lots of separate files because I couldn't do a sprite sheet).
So, CSS gradients were really the only way to handle this.
I have a custom CSS processor thing which lets me do a couple fancy things and then cache it to my server. One of the things it can do is let me define custom property replacements (similar to what markbrown was talking about), though I can write them as a normal property.
So, in my CSS, I would do this:
background: linear-gradient(blah blah)
and the processor would add all the vendor-specific versions. It would also add a background image, which was a dynamically generated SVG file for the gradient (for IE9). All together, we ended up with support for IE7+ and all the other browsers (the gradients don't seem to have any noticeable impact on any of the FF versions either).
The part I like about this is that as we drop support for browsers, I don't have to go edit all my CSS, I just change the function's code to drop them, until we are eventually (in the year 2152) just left with the one. =p