Tacking a Boolean on is one of my least favorite things; "super.retyped(context, tree, oldThis, newThis, env)" is not a string of characters which should occur twice in a method.

An alternative approach which involves less duplication and Boolean-tacking-on might go something like this:
```
override def retyped(context: Context, tree: Tree, oldThis: Symbol, newThis: Symbol, env: Map[Symbol, Type]): Tree =
  retypingWrapper(super.retyped(context, tree, oldThis, newThis, env))
protected def retypingWrapper[T](body: => T): T = body

// and at the instantiation site
val d = new specializeTypes.Duplicator(Map[Symbol, Type]()) {
  override protected def retypingWrapper[T](body: => T): T = beforeSpecialize(body)
}
```