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