There's a fair bit of duplication between this and the `define_method` within `define_example_method`.  I'm concerned about future maintainability as the shared bits will need to evolve together.  Here's an alternate way that I think will be more maintainable:

``` ruby
def self.define_example_method(name, extra_options={})
  define_method(name) do |*all_args, &block|
    desc, *args = *all_args
    options = Metadata.build_hash_from(args)
    options.update(:skip => RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block
    options.update(extra_options)

    if options[:pending]
      options, block = ExampleGroup.pending_metadata_and_block_for(options, block)
    end

    examples << RSpec::Core::Example.new(self, desc, options, block)
    examples.last
  end
end

def self.pending_metadata_and_block_for(options, block)
  if String === options[:pending]
    reason = options[:pending]
  else
    options = options.merge(:pending => true)
    reason = RSpec::Core::Pending::NO_REASON_GIVEN
  end

  callback = Proc.new { pending(reason, &block) } # I thikn you can forward the block to pending w/o instance_exec
  return options, callback
end

define_example_method :pending, :pending => RSpec::Core::Pending::NO_REASON_GIVEN
```

Basically, this inverts it: rather than making `:pending => true` metadata delegate to a `pending` class method, it replaces the metadata and block for `:pending => true` and makes `pending` just like any other example method alias, where it just adds `:pending` metadata.

The previously duplicated parts are no longer duplicated here.