The cleanest solution seems to be creating a plugin to intercept the PUT method and set the body back into where sabredav is expecting it
public function httpPutInterceptor($method, $uri) {
$this->server->httpRequest->setBody($this->body);
}
Complete module: https://github.com/chrisgo/kohana-sabredav
... now I just have to figure out why nginx is returning a 405 on a binary file PUT
vs a text file PUT
(correct behavior, passes it on to PHP)