si, infatti la funzione oncomplete viene eseguita con scope = window non il this al momento in cui la definisci.

Devi usare il metodo bind per cambiare lo scope della funzione:

codice:
var TuaClass = new Class({
   initialize : function(){
       this.variable = null; //Qui salverò la risposta della chiamata AJAX
       this.req =  new Request({url: 'database.php'
             onRequest : this.requestFunction.bind(this),
             onComplete: this.completeFunction.bind(this)             
  	});
       this.complete = true;
   },
   requestFunction : function(){
       this.complete = false;
   },
   completeFunction : function(response){
       //qui il this è uguale all'oggetto perché hai usato il bind() senza sarebbe window
       this.variable = response;
       this.complete = true;
   }
   getLastResponse : function(){
       return this.variable;
   },
   send : function(sql){
       this.req.post({"sql" : sql});
   },
   completed : function(){
      return this.complete;
   }
});

var obj = new TuaClasse();

obj.send("SELECT * FROM tabella WHERE campo = 'QUALCOSA' ORDER BY altrocampo DESC");
if(obj.completed())
     alert(obj.getLastResponse());
Se c'è qualcosa di non chiaro chiedi pure