This looks good to me. It would be nice to avoid using the internal TensorTools notation with the replacement rules, but I can't think of a good way to do so right now, so please feel free to merge the proposed version into master.
The way I have done this in the past is to add new variables for the exact solution rather than using the ADM variables. You can then output these, which give you the exact solution, and add a calculation which subtracts the ADM variables from the exact solution, and populates the error variables. This way, you can have all quantities available, and as a side benefit, you don't need to do the pattern matching on the calculation.
This does sound like a good solution. The only potential problem is that simulations could use a lot more memory since there are now a whole extra set of variables required for the exact solution. Would you consider that to be a problem? I guess we're typically not limited by memory in situations where exact solutions are used, so maybe it's not such a big deal.
The new variables would only be active if requested in the parameter file.