Weaving in traffic has it's own ticket: improper lane usage. There's also "crossing the center line". We also have an "unsafe speed for conditions" ticket, "careless driving", "unsafe lane change", and "following too closely".
As it is, the blood alcohol test only applies if you get pulled over for erratic behavior, breaking a traffic law, get in an accident, etc. Simply apply the same standard: if you do something noticed by an officer of the law (weaving, running someone over, etc.) then you get a ticket for it, regardless of the cause.
Punish the result, not the cause. In the end it doesn't matter if you ran someone over because you were drunk, high, loopy from cold medicine, or just plain incapable of driving safely. You still ran someone over.
The basic rule should be: don't drive if you know you shouldn't. And don't drive if you aren't capable of determining if you shouldn't. Legislating the cause of the bad driving isn't going to fix the bad driving. It will just have unintended consequences, as is evident from the entire "drug war" debacle.