This is a rather complicated way of writing a second level merge, which is also more generic and doesn't require knowledge of the list of conditions:

``` ruby
      options = (@block_options ||= []).inject({}) { |final, step|
        final.merge(step) { |key, first, second|
          first.is_a?(Hash) && second.is_a?(Hash) ? first.merge(second) : second
        }
      }.merge(options) { |key, first, second|
        first.is_a?(Hash) && second.is_a?(Hash) ? first.merge(second) : second
      }
```

Try it, all specs pass ;)