+7  A: 

You can use a type alias to define a type constructor like this:

type Context[A,B,C,D] = Mapper[A,B,C,D]#Context

def setup(ctx: Context[_,_,_,_]) = println(ctx)

Alternatively you can refer to mapper as an existential type:

def setup(ctx: Mapper[A,B,C,D]#Context forSome { type A; type B; type C; type D})

EDIT:

As Kris pointed out that setup() is defined in Mapper and overridden in your subclass a possible solution would rather look something like this:

trait SMapper[A,B,C,D] extends Mapper[A,B,C,D] {
  type Base = Mapper[A,B,C,D]                   
  type Ctx = Base#Context                       
}
// Now use it:
class M extends SMapper[String,Int,Int,String] {       
  override def setup(ctx: Ctx) { println("setup..."); }
}                                                      

EDIT 2: After you changed your description I had a look at appengine-mapreduce and this definitely works:

class TestMapper extends AppEngineMapper[Key, Entity, NullWritable, NullWritable]  {
  type Ctx = Mapper[Key, Entity, NullWritable, NullWritable]#Context                
  override def setup(ctx: Ctx) {}                                    
}
Moritz
You don't actually need the existential type; since setup is a method of Mapper that is being overridden, you can just use Mapper[A,B,C,D]#Context (or a type alias) as you suggest at first.
Kris Nuttycombe
I've added some info to my OP that may outline the problem better:* Mapper is static (if it matters...)* also I've added the class header...your first solutions didn't work. I've got error: name clash between defined and inherited member:method setup:(context: TestMapper1.this.Ctx)Unit andmethod setup:(x$1: org.apache.hadoop.mapreduce.Mapper[KEYIN,VALUEIN,KEYOUT,VALUEOUT]#Context)Unit in class AppEngineMapperhave same type after erasure: (context: org.apache.hadoop.mapreduce.Mapper#Context)Unitoverride def setup(context: Ctx) { I'm not sure how to apply the 3rd solution(same error)
Alexander Orlov