check for shortcode in post/pages AND widgets AND template files

Someone may correct me, but I think as of Version 3.3 you can enqueue scripts and styles “inline” of a post.

Means: you can add your wp_enqueue_script / style inside your shortcode function and WordPress will add them to the footer…since it’s too late to add them to the header.

Means: It will just work whenever the shortcode gets called.

Edit: in reply to Nick’s comment below regarding where to add the enqueue function:
I did a quick test with the example shortcode from the codex:

function caption_shortcode( $atts, $content = null ) {
    wp_enqueue_script('myscript','nonexistinglocation');
    wp_enqueue_style('mystyle','throwmeanerror');
    return '<span class="caption">' . $content . '</span>';
}

Tested it inside post content and text widget and worked so far ( disregarding the invalid URLs) The functions should be called before the return of course, (and yes, do it the right way, and register your script and styles beforehand [lazy])