The grunt clean task removes the .tmp/public directory. The clean task is the the first task that's run anytime you run 'sails lift' or anytime you make a change to a file in your assets directory. Since It seems to be running that task I think the problem might be that the clean task is not being loaded.
I get the same error as you do when I comment out this line
grunt.loadTasks(depsPath + '/grunt-contrib-clean/tasks');
Do you still have this line or do you have it commented out? Make sure you still have this entire block of code in your Gruntfile.
// Get path to core grunt dependencies from Sails
var depsPath = grunt.option('gdsrc') || 'node_modules/sails/node_modules';
grunt.loadTasks(depsPath + '/grunt-contrib-clean/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-copy/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-concat/tasks');
grunt.loadTasks(depsPath + '/grunt-sails-linker/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-jst/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-watch/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-uglify/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-cssmin/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-less/tasks');
grunt.loadTasks(depsPath + '/grunt-contrib-coffee/tasks');
If you do have that, make sure that in the 'node_modules/sails/node_modules' directory that your see a list of directories that that look like this.
'grunt-contrib-*sometTaskName*'.
If you don't see these, I would remove and reinstall your local version of sails for this project. Doing that should bring those in?