O, I think I understand your question better now :) 들려줘서 고마워 means thanks for letting me hear (for example a song), 불러줘서 고마워 means thanks for calling me/singing (a song) for me (here, if its meant as singing, it should be clear from the context that one is talking about a song, and not just someone calling you), 노래해줘서 고마워 always means thanks for singing. 부르다 is used instead of 노래하다 when it is clear from the context that we are talking about a song and it thus is unnecessary to mention this again.