Agreed!  Actually, I looked at several designs that would have allowed me to override just cogroup, combinebykey, and mapValues and and then rely on the rest of PairRDDFunctions.  In the end I decided to implement a separate version of the functions since many of them are not needed (they take partitioner information which is already constrained by the index) and the return type is an RDD[(K,V)] which would make it difficult to access the index.