Under such situations, I will make use of flags.
(function() {
//Flags
oneComplete = false;
twoComplete = false;
one(function() {
oneComeplete = true;
if (oneComplete && twoComeplete) {
three();
}
});
two(function() {
twoComeplete = true;
if (oneComplete && twoComeplete) {
three();
}
});
})();
Once one completes execution, it will enter callback and check whether two() is completed. If so, it will run three().
Again if two completes execution first then it will check for oneComplete and run three()
This solution will not scale if you need to add more functions like one() and two(). For such a case, I suggest https://github.com/mbostock/queue