The getJSON method will make a JSONP call if the URL contains a callback property.
"If the URL includes the string "callback=?" (or similar, as defined
  by the server-side API), the request is treated as JSONP instead."
Ref: http://api.jquery.com/jQuery.getJSON/
The request works fine, and the data arrives to the browser, but as the response is JSON and not JSONP, the data is just discarded and the success callback method will not be called.
I tried to change format=json to format=jsonp in the URL, but the response is an error message:
<fault>
        <faultstring>Fault raised in a policy</faultstring>
        <detail>
            <errorcode>31326</errorcode>
                <trace>
                    Fault Name: JSONP Bad Request
                    Error Type: MessageRouter
                    Description: Fault raised in a policy
                    Service: worldbank
                    Endpoint: target
                    Operation (Target):defaultOperation
                    FlowTransitionState : Target_Request_User_Error
                    Policy : EnforceMediationOnRequestPolicy
                    RaiseFaultAssertion
                </trace>
        </detail>
</fault>
You have to check with your API provider on how to make a JSONP request instead of a JSON request.
Edit:
As Jimmy Oliger says, the API uses a prefix property instead of callback. I tried this, and jQuery actually uses that property instead, and the success callback is called.
The response is an array where the first item is paging information, and the second item is the array containing the data, so loop json[1] to show the data:
Demo: http://jsfiddle.net/Guffa/3JRU6/4/
var url = 'http://api.worldbank.org/topic/4?per_page=10&format=jsonp&prefix=?';
var query;
$('button').click(function() {
    $.getJSON(url, function(json) {
        $.each(json[1], function(i, data) {
            $("#results").append('<p>' + data.value + '</p>');
        });
    });
});