Done always returns the promise, it does not make sense to return anything from the function that you supply to done:
The deferred.done() method accepts one or more arguments, all of which
  can be either a single function or an array of functions. When the
  Deferred is resolved, the doneCallbacks are called. Callbacks are
  executed in the order they were added. Since deferred.done() returns
  the deferred object, other methods of the deferred object can be
  chained to this one, including additional .done() methods
  Source: https://api.jquery.com/deferred.done/
promise.done(...).done(...) or promise.done(fn1, fn2) are equivalent. 
You can use .then if you want to return a new promise with a new value for "data", i.e.:
promise.then(function(data1){
  return data1.result;
}).done(function(data2){
  //the value of data2 here will be data1.result 
});
A somewhat common use of then is to return a new promise, for example:
promise.then(function(data){
  return $.ajax(...);
}).done(function(resultFromAjaxCall){});