Currently, the system I make use of is this:
Take the difference between your highest, unmodified stat, and 18. The difference may be used as points that can be placed into any stat except for your lowest, modified stat (in the case of a tie, the racially modified stat is considered lowest, otherwise, chosen as is appropriate for the character as the most appropriately low). This means that any character has a chance at an 18, no matter how poorly they roll.
Conversely, while I don't use this rule at the moment, I've been thinking about instituting this, in addition to the first rule:
Take the difference between your lowest, unmodified stat, and 8. If your lowest stat is above 8, these are points that must be subtracted from your stats, except for your highest, modified stat (again, racial adjustment taking precedence, most appropriate otherwise). If the lowest stat is below 8, these are points that may be added to any stat, except for the highest, modified one (I'll bet you can guess how ties work for this one, too). Thus, even someone who has the best stats in the world will be toned down a bit (10 points if your lowest, unmodified stat is an 18, which, come on, is hardly all that unfair, being that one could still have 16's across the board, and then one 18). Meanwhile, someone who rolled abysmally may get a few extra points out of it (in addition to whatever they received from the difference with their highest stat and 18).
Someone who rolls really well will still have an advantage over someone who doesn't do so hot, but at least those who the dice simply do not like will still be able to do well at one thing (or fix a few of those weak points). I also generally allow re-rolls when the stat modifiers, total, are below +6.