Edit in JSFiddle

jQuery.fn.customSort = function() {
    this.sort(function (a, b) {

        // give weights to account/market/contact
        // from their associated classes

        var aType,bType;
        
        if($(a).hasClass('market')) {
             aType = 1;   
        } else if($(a).hasClass('account')) {
             aType = 2;  
        } else if($(a).hasClass('contact')) {
             aType = 3;   
        }
        
        if($(b).hasClass('market')) {
            bType = 1;   
        } else if($(b).hasClass('account')) {
            bType = 2;  
        } else if($(b).hasClass('contact')) {
            bType = 3;   
        }
        
        // if we're comparing 2 items of the same
        // type, go down and level and sort them by
        // their html
        
        if (aType == bType) {
            a = $(a).html().toLowerCase();
            b = $(b).html().toLowerCase();
            
            if(a == b)
                return 0;
            return a < b ? -1 : 1;
            
        }
        return aType < bType ? -1 : 1;
    });
    
    // reorder the nodes in the DOM.
    
    this.each(function (i) {
        this.parentNode.appendChild(this);
    });
};
<h2>Sort by type, then name.</h2>

<ul id="test">
    <li class="contact">Smith, Joe</li>
    <li class="market">APAC</li>
    <li class="market">EMEA</li>
    <li class="market">CALA</li>
    <li class="account">Thingees and More</li>
    <li class="market">US</li>
    <li class="contact">Johnson,Sally</li>
    <li class="account">Spacely Sprockets</li>
    <li class="account">Cogs 'R Us</li>
    <li class="account">Widgets Widgets Widgets</li>
    <li class="contact">Apple, Fiona</li>
</ul>

<input type="button" onclick="$('#test li').customSort();" value="Sort">
li.contact { color: green }
li.account { color: blue }
li.market {color: red}