You're on the right track with using a callback. You need to trigger the marker click after the scrolling has completed. If the issue your facing is your scripts are hiding functions from one another, create a global application object and place the functions needed in there. You'll also want to remove the javascript from the href attributes and replace them with another data attribute with the corresponding id.
<ul class="chart">
<li><a data-slide="3" data-id="bond">Bond Street</a></li>
<li><a data-slide="3" data-id="barbican">Barbican</a></li>
</ul>
Create a application wide object to store functions
window.myapp = {};
Add the triggerClick function to this object
myapp.triggerClick = function(){...};
Now call this function after the animation has completed by using a callback
function goToByScroll(data) {
htmlbody.animate({
scrollTop: $('.slide[data-slide="' + data.slide + '"]').offset().top
}, 2000, 'easeInOutQuint', function() {
myapp.triggerClick(data.id);
});
}
chartLink.click(function (e) {
e.preventDefault();
goToByScroll($(this.data()); // use jquery to grab all the data attributes
});