Here is my attempt, 181 bytes:
a = ' bottle%s of beer'
b = ' on the wall'
99.downto(0){|i|s=(i==1?'':'s');printf "#{i}#{a}#{b}, #{i}#{a}.\nTake one down, pass it around, #{i==0?'no more':i}#{a}#{b}.\n",s,s,s}
Michael Davis
Database Architect and Senior Software Engineer, Seva Inc.
Office: 303-460-7360 Fax: 303-460-7362
Mobile: 720-320-6971
Email: mdavis / sevainc.com