It's a good start, you're almost there.

So, just to explain iteratee.flatMap a bit.  An iteratee will consume a stream until it's done, this might be before the end of the stream.  flatMap allows you to get the result of that iteratee, and then return a new iteratee to continue consuming the stream where the current iteratee left off (I find "andThen" is a better conceptual name for it).  So what you want to do, after you've consumed that first chunk, you're done, so the new iteratee that you want to return is a done iteratee containing the new SimpleResult.  This is what you're doing, with the exception of this:

    // Instruct the rest of the Iteratee to clear through to done
    result.body |>> Done(())

That's not necessary since you're already returning done to consume (ignore) the rest of the stream.  So delete that line and your singleChunkIteratee will be fine.

So, now you've got your iteratee that produces a SimpleResult.  You're almost right in the implementation above, the problem is that you're flatMapping the iteratee that consumes the request body to then apply the singleChunkIteratee - which means you're trying to consume the request body with that iteratee, not the response body.  Instead of using bodyIteratee.flatMap, use bodyIteratee.mapM.  This gives you the result, and lets you return a future of a result.  Then you can use `result.body |>>> singleChunkIteratee(result, requestHeader.version)` to feed the response body into your single chunk iteratee, which will give you a future of a result.  And in the case where there's already a content length or transfer encoding, instead of wrapping it in a Done iteratee, you want to wrap it in Future.successful.  And then fingers crossed, everything should work.