I like the idea of providing an RSpec shared example to test all these behaviours.
For the constructor, I would change "consider using keywords" to "should use keywords". Keywords should be the default, unless the order is really obvious.
Re: "Value construction options could be provided by keyword arguments." I would probably prefer value contruction options to be in separate class methods, instead of #new.
Re: caching. I would be hesitant to do this at the global level (e.g. stored in the class).