If you want to timestamp documents yourself, without needing to use a third-party service, you can use the OP_RETURN opcode to create an invalid transaction, & put ~40 bytes of arbitrary data into the scriptPubKey of a transaction output. You can either store a (small!) hash in there, some UTF8 encoding, or similar, referencing your document. Then you have a record in the blockchain (although certain nodes will prune it upon seeing the OP_RETURN opcode) of your message, timestamped.