As for the ruby 1.9 solution, I'm not 100% sure, but ruby 1.9.2 adds the method parameter method #, which returns params in an array of characters:
irb(main):001:0> def sample_method(a, b=0, *c, &d);end
=> nil
irb(main):002:0> self.method(:sample_method).parameters
=> [[:req, :a], [:opt, :b], [:rest, :c], [:block, :d]]
, .