3. We need to set getDistinctSnapshotLength to a non-zero value. Can you tell me what exactly the length means? Currently we are sending only one field in the item update, which is a JSON string. Should we give the length of the JSON string?
the length is the number of updates that will form the snapshot; As a practical example, take a look to our ChatDemo, (unless you're unlucky and the server was just upgraded and restarted) you'll immediately receive 30 messages; that's because the snapshot lenght of that item is set to 30 (note that the client may ask for a shorter snapshot, in our case the client request and the server limit are the same).

4. On doing all the above, LS will maintain the last updated value for each item internally and send it to the new person who is subscribing to the same item. Is my understanding correct? or do we need to update LS Listener asking it to keep the item as a snap shot?
The server will mantain and update the snapshot internally while the subscription for that item is active, that's correct.

Should we also do the below? What is the purpose of having IsSnapShot in the smart update method? If I set it to True, no update is coming to any of the client.
In case of a distinct subscription, the first client will not receive any data until the server has received from the adapter a complete snapshot. The snapshot is considered complete when the onSnapshotEnd method is called or when one of the smartUpdate is called with the isSnapshot flag as false (so the completeness of the first snapshot is unrelated to the distinct snapshot length)

Note that Dario's suggestion about tracking in the log the events is still valid.