I think you may consider doing it on the before event with a timeout equal or slightly less than the fx duration. Something along these lines:
Demo: http://jsfiddle.net/lucuma/ny2Tj/5/
var desktop = {
next: "#next_slide",
prev: "#prev_slide",
speed: 2000,
pager: "#pag",
easeIn: 'easeOutQuad',
easeOut: 'easeInQuad',
fx: 'custom',
height: '314px',
cssBefore:{
left: '-20%',
opacity: 0,
display: 'block'
},
cssAfter:{
display: 'none',
opacity: 0
},
animIn: {
left: '0%',
opacity: 1
},
animOut: {
left: '20%',
opacity: 0
},
sync: false,
'timeout': 7000,
before: function(currSlideElement, nextSlideElement, options, forwardFlag){
var $opts= options;
setTimeout(function() {
$('#controls p').html( ($opts.currSlide + 1 ) + ' <em>of</em> ' + $opts.slideCount)
}, 7000);
}
}